package com.zyd.blog.personal.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期转换工具
 * @author mfy
 */
public class DateUtils {
	
	/**
	 * 声明可以转换的时间格式类型
	 */
	static SimpleDateFormat[] simpleDateFormats = {

			new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
			new SimpleDateFormat("yyyy-MM-dd HH:mm"),
			new SimpleDateFormat("yyyy-MM-dd HH"),

			new SimpleDateFormat("yyyy-MM-dd"),
			new SimpleDateFormat("yyyy年MM月dd日"),
			new SimpleDateFormat("yyyy/MM/dd"),
			new SimpleDateFormat("yyyy.MM.dd"),
			new SimpleDateFormat("yyyyMMdd"),

			new SimpleDateFormat("yyyy-MM"),
			new SimpleDateFormat("yyyy/MM"),
			new SimpleDateFormat("yyyy年MM月"),
			new SimpleDateFormat("yyyy.MM"),
			new SimpleDateFormat("yyyyMM"),

			new SimpleDateFormat("yyyy"),
			new SimpleDateFormat("yyyy年")

	};
	
	/**
	 * 将字符串转化成Date类型
	 * @param str	时间类型字符串
	 * @return	Date类型时间
	 */
	public static Date parseStringToDate(String str){
		if(str == null || "".equals(str)){
			return null;
		}
		for (SimpleDateFormat simpleDateFormat : simpleDateFormats) {
			try {
				return simpleDateFormat.parse(str);
			} catch (ParseException ignored) {
			}
		}
		throw new RuntimeException(str + "的日期格式不对,转换失败!");
	}

	/**
	 * 将字符串转化成毫秒级时间类型
	 * @param str	时间类型字符串
	 * @return	毫秒级时间
	 */
	public static Long parseStringToLong(String str){
		if(str == null || "".equals(str)){
			return null;
		}
		return parseStringToDate(str).getTime();
	}

	/**
	 * 将毫秒级时间格式化为字符串
	 * @param date	毫秒级时间
	 * @param simpleDateFormats		时间格式类型
	 * @return	格式化后的时间
	 */
	public static String parseLongToString(Long date,String simpleDateFormats){
		if(date == null){
			return null;
		}
		if(simpleDateFormats == null || "".equals(simpleDateFormats)){
			simpleDateFormats = "yyyy-MM-dd";
		}
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(simpleDateFormats);
		return simpleDateFormat.format(new Date(date));
	}

	/**
	 * 将Date级时间格式化为字符串
	 * @param date	Date级时间
	 * @param simpleDateFormats		时间格式类型
	 * @return	格式化后的时间
	 */
	public static String parseDateToString(Date date,String simpleDateFormats){
		if(date == null){
			return null;
		}
		if(simpleDateFormats == null || "".equals(simpleDateFormats)){
			simpleDateFormats = "yyyy-MM-dd";
		}
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(simpleDateFormats);
		return simpleDateFormat.format(date);
	}

}

